package com.kate.mall.common.utils;

import com.kate.mall.common.constants.WxResponseCode;
import org.apache.http.HttpStatus;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 * 
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2016年10月27日 下午9:59:27
 */
public class R extends HashMap<String, Object> {
    private static final long serialVersionUID = 1L;

    public R() {
        put("errno", 0);
        put("errmsg", "success");
    }

    public static R error() {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常，请联系管理员");
    }

    public static R error(String msg) {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
    }

    public static R error(int code, String msg) {
        R r = new R();
        r.put("errno", code);
        r.put("errmsg", msg);
        return r;
    }

    public static R error(int code, String msg, Object data) {
        R r = new R();
        r.put("errno", code);
        r.put("errmsg", msg);
        r.put("data", data);
        return r;
    }


    public static R ok(String msg) {
        R r = new R();
        r.put("errmsg", msg);
        return r;
    }

    public static R ok(Map<String, Object> map) {
        R r = new R();
        r.putAll(map);
        return r;
    }

    public static R ok() {
        return new R();
    }

    public static R updatedDataFailed() {
        return error(505, "更新数据失败");
    }

    public static Object serious() {
        return error(502, "系统内部错误");
    }

    public static R updatedDateExpired() {
        return error(504, "更新数据已经失效");
    }

    public R put(String key, Object value) {
        super.put(key, value);
        return this;
    }



    /**
     * 未登录返回结果
     */
    public static R unauthorized(Object data) {
        return new R().error(WxResponseCode.AUTH_UNAUTHORIZED.getCode(), WxResponseCode.AUTH_UNAUTHORIZED.getMsg(), data);
    }

    /**
     * 未授权返回结果
     */
    public static R forbidden(Object data) {
        return new R().error(WxResponseCode.AUTH_FORBIDDEN.getCode(), WxResponseCode.AUTH_FORBIDDEN.getMsg(), data);
    }
    public static R badArgument() {
        R r = new R();
        r.put("errno", 401);
        r.put("errmsg", "参数不对");
        return r;
    }

    public static R badArgumentValue() {
        R r = new R();
        r.put("errno", 402);
        r.put("errmsg", "参数值不对");
        return r;
    }

}
